5
תגובות

קריאה למחלקה בתוך מחלקה

פתח zacharya ,
טוב בעיקרון עשיתי קובץ בשם אינקס ושם עשיתי אינקלוד לקובץ עם המחלקה בשם PAGE, עכשיו המלקה PAGE משתמשת בשני משתנים של אינדקס ככה:
// שתדעו שזה רק קוד דוגמה כן?
class page
{
public function page()
{
global $name;
}
}

עכשיו בתוך המחלקה פונקציה עם תנאי שאם הוא מתקיים אז נוצר הדבר הבא:
include("file.php");
$file = new file();
return $file->head();


עכשיו בקובץ FILE (שהוא גם מחלקה), אני מעוניין גם להשתמש במשתנה USER הנמצא באינדקס, אבל גם אם אני עושה GLOBAL הוא מחזיר שגיאת שרת.

עזרה?

5 תשובות

avatar ענה ldbrgr ב 14 לספטמבר 2013 #

אתה רוצה שהמחלקה FILE תשתמש במשתנה גלובלי או משתנה ששיך למחלקה אחרת? בכל מקרה כדי להשתמש במשתנה של מחלקה אחרת תעשה

$user = $obj->user;

או שתגדיר getter.
---
אם הוא משתנה גלובלי תקרא אותו ככה:
global $user;
// or
$user = $GLOBALS['user'];

avatar ענה zacharya ב 14 לספטמבר 2013 #

ניסיתי את $user = $obj->user; לא עבד, בנוגע לשני כנראה לא הבנת מה שאמרתי,
יש קובץ בשם אינדקס שעושה אינקלוד לקובץ PGAE:

include("page.php");
$page = new page();

יש את המחלקה PAGE שבקובץ PAGE:
class page{
       public funtcion name(){
            include("file.php");
            $file = new file();
            return $file->head();
       }
}


עכשיו הפונקציה HEAD אני רוצה שהיא תשתמש במשתנה USER שנמצא בקובץ אינדקס.

avatar ענה intval ב 14 לספטמבר 2013 #

באתר יש כתבות על כל מיני דברים שצריך בכל דרך אפשרית להימנע מהם, כמו @, die
וglobal זה אחד מהם. להימנע מזה אפשר די בקלות, על ידי העברת פרמטרים.
בקוד זה נראה ככה:


index.php

require 'file.php';
require 'page.php';

$user = 123;
$file = new file();

$page = new page($user, $file);
$page->doSomeStuff();



page.php
class Page
{
  private $user;
  private $file;

  public __construct($user, $file)
  {
    $this->user = $user;
    $this->file = $file;
  }

  public doSomeStuff()
  {
    return $this->file->head($this->user);
  }
}

avatar ענה zacharya ב 15 לספטמבר 2013 #

תודה, חשבתי על לעשות משהו בסגנון...
בנוגע ל"@", אף פעם לא נתקלתי בזה, אשמח לקבל הסבר לידע כללי.
ושוב תודה אלכס!

avatar ענה zacharya ב 15 לספטמבר 2013 #

אגב, איזו סיבה יש לא להשתמש בGLOBAL?